import json  # 导入Python的json模块，用于处理JSON数据格式。

from data_define import Record  # 从data_define模块导入Record类，Record是一个用于存储销售数据记录的类。

# 定义一个抽象基类FileReader，用于读取数据。
class FileReader:
    def read_data(self) -> list[Record]:  # 定义一个抽象方法read_data，它应该返回一个Record对象的列表。
        pass  # 由于这是抽象方法，所以在这里不实现任何功能。

# 定义TextFileReader类，它继承自FileReader类，用于读取文本格式的销售数据。
class TextFileReader(FileReader):
    def __init__(self, path):  # 构造函数，接受一个文件路径作为参数。
        self.path = path  # 将文件路径存储在实例变量中。

    def read_data(self) -> list[Record]:  # 重写FileReader类的read_data方法。
        with open(self.path, 'r', encoding='UTF-8') as f:  # 使用with语句打开文件，确保文件在读取后正确关闭。
            record_list = []  # 初始化一个空列表，用于存储读取的记录。
            for line in f:  # 逐行读取文件。
                line = line.strip()  # 去除每行末尾的换行符和空格。
                if line:  # 确保行不为空。
                    data_list = line.split(',')  # 将每行按逗号分割成列表。
                    record = Record(data_list[0], data_list[1], int(data_list[2]), data_list[3])  # 使用分割后的数据创建Record对象。
                    record_list.append(record)  # 将创建的Record对象添加到列表中。
        return record_list  # 返回存储了所有Record对象的列表。

# 定义JsonFileReader类，它也继承自FileReader类，用于读取JSON格式的销售数据。
class JsonFileReader(FileReader):
    def __init__(self, path):  # 构造函数，接受一个文件路径作为参数。
        self.path = path  # 将文件路径存储在实例变量中。

    def read_data(self) -> list[Record]:  # 重写FileReader类的read_data方法。
        try:
            with open(self.path, 'r', encoding='UTF-8') as f:  # 使用with语句打开文件，确保文件在读取后正确关闭。
                record_list = []  # 初始化一个空列表，用于存储读取的记录。
                for line in f:  # 逐行读取文件。
                    data_dict = json.loads(line)  # 将每行解析为JSON对象（字典）。
                    record = Record(data_dict["data"], data_dict["order_id"], int(data_dict["money"]), data_dict["province"])  # 使用解析后的数据创建Record对象。
                    record_list.append(record)  # 将创建的Record对象添加到列表中。
        except json.JSONDecodeError as e:  # 捕获JSON解析错误。
            print(f"JSON 解析错误: {e}")  # 打印错误信息。
            return []  # 返回空列表，表示读取失败。
        except Exception as e:  # 捕获其他所有异常。
            print(f"读取文件时发生错误: {e}")  # 打印错误信息。
            return []  # 返回空列表，表示读取失败。
        return record_list  # 如果一切正常，返回存储了所有Record对象的列表。

# 测试代码
if __name__ == '__main__':  # 判断脚本是否作为主程序运行。
    text_file_reader = TextFileReader('2011年1月销售数据.txt')  # 创建TextFileReader对象，指定文本文件的路径。
    json_file_reader = JsonFileReader("2011年2月销售数据JSON.txt")  # 创建JsonFileReader对象，指定JSON文件的路径。
    list1 = text_file_reader.read_data()  # 调用TextFileReader对象的read_data方法，读取文本文件中的数据。
    list2 = json_file_reader.read_data()  # 调用JsonFileReader对象的read_data方法，读取JSON文件中的数据。

    for l in list1:  # 遍历文本文件读取的记录列表。
        print(l)  # 打印每个记录。这里假设Record类有合适的__str__方法或类似的，以便能够打印出有意义的信息。

    for l in list2:  # 遍历JSON文件读取的记录列表。
        print(l)  # 打印每个记录。同样，这里也假设Record类有合适的__str__方法。